package com.distribuida.supertrunfo.comum;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Caracteristica implements Comparable<Caracteristica>, Serializable{

	private String id;
	private String tipo;
	private String nome;
	private double valor;
	private String valorString;

	public Caracteristica(String id, String tipo, String nome) {
		this.id = id;
		if(tipo.equals("nula") || tipo.equals("maior") || tipo.equals("menor"))
			this.tipo = tipo;
		else
			new Exception("Tipo da caracteritica invalido");
		this.nome = nome;
	}

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}

	public String getTipo() {
		return tipo;
	}
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

	public double getValor() {
		return valor;
	}
	public void setValor(String valor) {
		this.valor = Double.parseDouble(valor);
	}

	/**
	 * Retorna -1 caso a this.caracteristica perca para caracteristica,
	 * retorna 1 caso a this.caracteristica ganhe de caracteristica e
	 * 0 caso sejam iguais. Leva em conta o tipo das caracteristicas
	 * 
	 * @param caracteristica
	 */
	@Override
	public int compareTo(Caracteristica caracteristica) {
		if(id.equals(caracteristica.getId()) && tipo.equals(caracteristica.getTipo()) && nome.equals(caracteristica.getNome())) {
			if(tipo.equals("nula")) {
				new Exception("Caracteristica nao mensuravel");
			} else {
				if(tipo.equals("maior")) {
					if (valor < caracteristica.getValor()) 
						return -1;
					else if (valor > caracteristica.getValor())
						return 1;
					else 
						return 0;
				} else if(tipo.equals("menor")) {
					if (valor > caracteristica.getValor()) 
						return -1;
					else if (valor < caracteristica.getValor())
						return 1;
					else 
						return 0;
				}
			}
		} else {
			new Exception("Caracteristicas nao comparaveis");
		}
		return 0;
	}

	public String getValorString() {
		return valorString;
	}

	public void setValorString(String valorString) {
		this.valorString = valorString;
	}

}
